﻿<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>name</key>
    <string>C#</string>
    <key>scopeName</key>
    <string>source.cs</string>
    <key>fileTypes</key>
    <array>
      <string>cs</string>
    </array>
    <key>uuid</key>
    <string>f7de61e2-bdde-4e2a-a139-8221b179584e</string>
    <key>patterns</key>
    <array>
      <dict>
        <key>include</key>
        <string>#preprocessor</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#comment</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#directives</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#declarations</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#script-top-level</string>
      </dict>
    </array>
    <key>repository</key>
    <dict>
      <key>directives</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#extern-alias-directive</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#using-directive</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#attribute-section</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-semicolon</string>
          </dict>
        </array>
      </dict>
      <key>declarations</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#namespace-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#type-declarations</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-semicolon</string>
          </dict>
        </array>
      </dict>
      <key>script-top-level</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#method-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-semicolon</string>
          </dict>
        </array>
      </dict>
      <key>type-declarations</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#preprocessor</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#storage-modifier</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#class-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#delegate-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#enum-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#interface-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#struct-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#attribute-section</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-semicolon</string>
          </dict>
        </array>
      </dict>
      <key>class-members</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#preprocessor</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#storage-modifier</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#type-declarations</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#event-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#property-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#indexer-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#field-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#variable-initializer</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#constructor-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#destructor-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#operator-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#conversion-operator-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#method-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#attribute-section</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-semicolon</string>
          </dict>
        </array>
      </dict>
      <key>struct-members</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#preprocessor</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#storage-modifier</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#type-declarations</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#event-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#property-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#indexer-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#field-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#variable-initializer</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#constructor-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#destructor-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#operator-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#conversion-operator-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#method-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#attribute-section</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-semicolon</string>
          </dict>
        </array>
      </dict>
      <key>interface-members</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#preprocessor</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#event-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#property-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#indexer-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#method-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#attribute-section</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-semicolon</string>
          </dict>
        </array>
      </dict>
      <key>statement</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#preprocessor</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#while-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#do-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#for-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#foreach-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#if-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#else-part</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#switch-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#goto-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#return-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#break-or-continue-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#throw-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#yield-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#try-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#checked-unchecked-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#lock-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#using-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#labeled-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#local-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#block</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-semicolon</string>
          </dict>
        </array>
      </dict>
      <key>expression</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#preprocessor</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#checked-unchecked-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#typeof-or-default-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#nameof-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#interpolated-string</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#verbatim-interpolated-string</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#this-or-base-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#conditional-operator</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression-operators</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#await-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#query-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#as-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#is-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#anonymous-method-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#object-creation-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#array-creation-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#anonymous-object-creation-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#member-access-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#invocation-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#element-access-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#cast-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#parenthesized-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#initializer-expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#identifier</string>
          </dict>
        </array>
      </dict>
      <key>extern-alias-directive</key>
      <dict>
        <key>begin</key>
        <string>\s*(extern)\b\s*(alias)\b\s*([_[:alpha:]][_[:alnum:]]*)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.other.extern.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.other.alias.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>variable.other.alias.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;)</string>
      </dict>
      <key>using-directive</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>\b(using)\b\s+(static)\s+</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>keyword.other.using.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>keyword.other.static.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=;)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>\b(using)\s+(?=([_[:alpha:]][_[:alnum:]]*)\s*=)</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>keyword.other.using.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>entity.name.type.alias.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=;)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#comment</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#operator-assignment</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>\b(using)\s*</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>keyword.other.using.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=;)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#comment</string>
              </dict>
              <dict>
                <key>name</key>
                <string>entity.name.type.namespace.cs</string>
                <key>match</key>
                <string>[_[:alpha:]][_[:alnum:]]*</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#operator-assignment</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>attribute-section</key>
      <dict>
        <key>begin</key>
        <string>(\[)(assembly|module|field|event|method|param|property|return|type)?(\:)?</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.squarebracket.open.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.other.attribute-specifier.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>punctuation.separator.colon.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(\])</string>
        <key>endCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.squarebracket.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#attribute</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
        </array>
      </dict>
      <key>attribute</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#type-name</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#attribute-arguments</string>
          </dict>
        </array>
      </dict>
      <key>attribute-arguments</key>
      <dict>
        <key>begin</key>
        <string>(\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(\))</string>
        <key>endCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#attribute-named-argument</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
        </array>
      </dict>
      <key>attribute-named-argument</key>
      <dict>
        <key>begin</key>
        <string>([_[:alpha:]][_[:alnum:]]*)\s*(?==)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.property.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=(,|\)))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#operator-assignment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>namespace-declaration</key>
      <dict>
        <key>begin</key>
        <string>\b(namespace)\s+</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.other.namespace.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>name</key>
            <string>entity.name.type.namespace.cs</string>
            <key>match</key>
            <string>[_[:alpha:]][_[:alnum:]]*</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-accessor</string>
          </dict>
          <dict>
            <key>begin</key>
            <string>\{</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\}</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#declarations</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#using-directive</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#punctuation-semicolon</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>storage-modifier</key>
      <dict>
        <key>name</key>
        <string>storage.modifier.cs</string>
        <key>match</key>
        <string>(?&lt;!\.)\b(new|public|protected|internal|private|abstract|virtual|override|sealed|static|partial|readonly|volatile|const|extern|async|unsafe)\b</string>
      </dict>
      <key>class-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?=\bclass\b)</string>
        <key>end</key>
        <string>(?&lt;=\})</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>(?x)
\b(class)\b\s+
([_[:alpha:]][_[:alnum:]]*)\s*</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>keyword.other.class.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>entity.name.type.class.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=\{)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type-parameter-list</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#base-types</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#generic-constraints</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>\{</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\}</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#class-members</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
        </array>
      </dict>
      <key>delegate-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?x)
(?:\b(delegate)\b)\s+
(?&lt;type-name&gt;
  (?:
      (?:(?&lt;identifier&gt;[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name-and-type-args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type-args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type-args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name-and-type-args&gt;)* # Are there any more names being dotted into?
      (?:\s*\*\s*)* # pointer suffix?
      (?:\s*\?\s*)? # nullable suffix?
      (?:\s*\[(?:\s*,\s*)*\]\s*)* # array suffix?
  )|
  (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
)\s+
(\g&lt;identifier&gt;)\s*
(&lt;([^&lt;&gt;]+)&gt;)?\s*
(?=\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.other.delegate.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>7</key>
          <dict>
            <key>name</key>
            <string>entity.name.type.delegate.cs</string>
          </dict>
          <key>8</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type-parameter-list</string>
              </dict>
            </array>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#parenthesized-parameter-list</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#generic-constraints</string>
          </dict>
        </array>
      </dict>
      <key>enum-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?=\benum\b)</string>
        <key>end</key>
        <string>(?&lt;=\})</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>(?=enum)</string>
            <key>end</key>
            <string>(?=\{)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>match</key>
                <string>(enum)\s+([_[:alpha:]][_[:alnum:]]*)</string>
                <key>captures</key>
                <dict>
                  <key>1</key>
                  <dict>
                    <key>name</key>
                    <string>keyword.other.enum.cs</string>
                  </dict>
                  <key>2</key>
                  <dict>
                    <key>name</key>
                    <string>entity.name.type.enum.cs</string>
                  </dict>
                </dict>
              </dict>
              <dict>
                <key>begin</key>
                <string>:</string>
                <key>beginCaptures</key>
                <dict>
                  <key>0</key>
                  <dict>
                    <key>name</key>
                    <string>punctuation.separator.colon.cs</string>
                  </dict>
                </dict>
                <key>end</key>
                <string>(?=\{)</string>
                <key>patterns</key>
                <array>
                  <dict>
                    <key>include</key>
                    <string>#type</string>
                  </dict>
                </array>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>\{</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\}</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#preprocessor</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#comment</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#attribute-section</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#punctuation-comma</string>
              </dict>
              <dict>
                <key>begin</key>
                <string>[_[:alpha:]][_[:alnum:]]*</string>
                <key>beginCaptures</key>
                <dict>
                  <key>0</key>
                  <dict>
                    <key>name</key>
                    <string>entity.name.variable.enum-member.cs</string>
                  </dict>
                </dict>
                <key>end</key>
                <string>(?=(,|\}))</string>
                <key>patterns</key>
                <array>
                  <dict>
                    <key>include</key>
                    <string>#comment</string>
                  </dict>
                  <dict>
                    <key>include</key>
                    <string>#variable-initializer</string>
                  </dict>
                </array>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
        </array>
      </dict>
      <key>interface-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?=\binterface\b)</string>
        <key>end</key>
        <string>(?&lt;=\})</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>(?x)
(interface)\b\s+
([_[:alpha:]][_[:alnum:]]*)</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>keyword.other.interface.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>entity.name.type.interface.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=\{)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type-parameter-list</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#base-types</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#generic-constraints</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>\{</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\}</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#interface-members</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
        </array>
      </dict>
      <key>struct-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?=\bstruct\b)</string>
        <key>end</key>
        <string>(?&lt;=\})</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>(?x)
(struct)\b\s+
([_[:alpha:]][_[:alnum:]]*)</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>keyword.other.struct.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>entity.name.type.struct.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=\{)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type-parameter-list</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#base-types</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#generic-constraints</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>\{</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\}</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#struct-members</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
        </array>
      </dict>
      <key>type-parameter-list</key>
      <dict>
        <key>begin</key>
        <string>\&lt;</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.typeparameters.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\&gt;</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.typeparameters.end.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>match</key>
            <string>\b(in|out)\b</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>storage.modifier.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>match</key>
            <string>\b([_[:alpha:]][_[:alnum:]]*)\b</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>entity.name.type.type-parameter.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#attribute-section</string>
          </dict>
        </array>
      </dict>
      <key>base-types</key>
      <dict>
        <key>begin</key>
        <string>:</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.separator.colon.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=\{|where)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#type</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
        </array>
      </dict>
      <key>generic-constraints</key>
      <dict>
        <key>begin</key>
        <string>(where)\s+([_[:alpha:]][_[:alnum:]]*)\s*(:)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.other.where.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>storage.type.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>punctuation.separator.colon.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=\{|where|;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>keyword.other.class.cs</string>
            <key>match</key>
            <string>\bclass\b</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.other.struct.cs</string>
            <key>match</key>
            <string>\bstruct\b</string>
          </dict>
          <dict>
            <key>match</key>
            <string>(new)\s*(\()\s*(\))</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>keyword.other.new.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.open.cs</string>
              </dict>
              <key>3</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.close.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>include</key>
            <string>#type</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#generic-constraints</string>
          </dict>
        </array>
      </dict>
      <key>field-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?x)
(?&lt;type-name&gt;
  (?:
      (?:(?&lt;identifier&gt;[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name-and-type-args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type-args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type-args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name-and-type-args&gt;)* # Are there any more names being dotted into?
      (?:\s*\*\s*)* # pointer suffix?
      (?:\s*\?\s*)? # nullable suffix?
      (?:\s*\[(?:\s*,\s*)*\]\s*)* # array suffix?
  )|
  (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
)\s+
(\g&lt;identifier&gt;)\s* # first field name
(?!=&gt;|==)(?=,|;|=)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>6</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.field.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>entity.name.variable.field.cs</string>
            <key>match</key>
            <string>[_[:alpha:]][_[:alnum:]]*</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#variable-initializer</string>
          </dict>
        </array>
      </dict>
      <key>property-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?x)
(?!.*\b(?:class|interface|struct|enum|event)\b)\s*
(?&lt;return-type&gt;
  (?&lt;type-name&gt;
    (?:
        (?:(?&lt;identifier&gt;[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
        (?&lt;name-and-type-args&gt; # identifier + type arguments (if any)
          \g&lt;identifier&gt;\s*
          (?&lt;type-args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type-args&gt;)+&gt;\s*)?
        )
        (?:\s*\.\s*\g&lt;name-and-type-args&gt;)* # Are there any more names being dotted into?
        (?:\s*\*\s*)* # pointer suffix?
        (?:\s*\?\s*)? # nullable suffix?
        (?:\s*\[(?:\s*,\s*)*\]\s*)* # array suffix?
    )|
    (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
  )\s+
)
(?&lt;interface-name&gt;\g&lt;type-name&gt;\s*\.\s*)?
(?&lt;property-name&gt;\g&lt;identifier&gt;)\s*
(?=\{|=&gt;|$)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>7</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#punctuation-accessor</string>
              </dict>
            </array>
          </dict>
          <key>8</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.property.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#property-accessors</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#variable-initializer</string>
          </dict>
        </array>
      </dict>
      <key>indexer-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?x)
(?&lt;return-type&gt;
  (?&lt;type-name&gt;
    (?:
        (?:(?&lt;identifier&gt;[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
        (?&lt;name-and-type-args&gt; # identifier + type arguments (if any)
          \g&lt;identifier&gt;\s*
          (?&lt;type-args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type-args&gt;)+&gt;\s*)?
        )
        (?:\s*\.\s*\g&lt;name-and-type-args&gt;)* # Are there any more names being dotted into?
        (?:\s*\*\s*)* # pointer suffix?
        (?:\s*\?\s*)? # nullable suffix?
        (?:\s*\[(?:\s*,\s*)*\]\s*)* # array suffix?
    )|
    (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
  )\s+
)
(?&lt;interface-name&gt;\g&lt;type-name&gt;\s*\.\s*)?
(?&lt;indexer-name&gt;this)\s*
(?=\[)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>7</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#punctuation-accessor</string>
              </dict>
            </array>
          </dict>
          <key>8</key>
          <dict>
            <key>name</key>
            <string>keyword.other.this.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#bracketed-parameter-list</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#property-accessors</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#variable-initializer</string>
          </dict>
        </array>
      </dict>
      <key>event-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?x)
\b(event)\b\s*
(?&lt;return-type&gt;
  (?&lt;type-name&gt;
    (?:
        (?:(?&lt;identifier&gt;[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
        (?&lt;name-and-type-args&gt; # identifier + type arguments (if any)
          \g&lt;identifier&gt;\s*
          (?&lt;type-args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type-args&gt;)+&gt;\s*)?
        )
        (?:\s*\.\s*\g&lt;name-and-type-args&gt;)* # Are there any more names being dotted into?
        (?:\s*\*\s*)* # pointer suffix?
        (?:\s*\?\s*)? # nullable suffix?
        (?:\s*\[(?:\s*,\s*)*\]\s*)* # array suffix?
    )|
    (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
  )\s+
)
(?&lt;interface-name&gt;\g&lt;type-name&gt;\s*\.\s*)?
(?&lt;event-names&gt;\g&lt;identifier&gt;(?:\s*,\s*\g&lt;identifier&gt;)*)\s*
(?=\{|;|$)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.other.event.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>8</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#punctuation-accessor</string>
              </dict>
            </array>
          </dict>
          <key>9</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>name</key>
                <string>entity.name.variable.event.cs</string>
                <key>match</key>
                <string>[_[:alpha:]][_[:alnum:]]*</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#punctuation-comma</string>
              </dict>
            </array>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#event-accessors</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
        </array>
      </dict>
      <key>property-accessors</key>
      <dict>
        <key>begin</key>
        <string>\{</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.curlybrace.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\}</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.curlybrace.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>storage.modifier.cs</string>
            <key>match</key>
            <string>\b(private|protected|internal)\b</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.other.get.cs</string>
            <key>match</key>
            <string>\b(get)\b</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.other.set.cs</string>
            <key>match</key>
            <string>\b(set)\b</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#attribute-section</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#block</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-semicolon</string>
          </dict>
        </array>
      </dict>
      <key>event-accessors</key>
      <dict>
        <key>begin</key>
        <string>\{</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.curlybrace.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\}</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.curlybrace.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>keyword.other.add.cs</string>
            <key>match</key>
            <string>\b(add)\b</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.other.remove.cs</string>
            <key>match</key>
            <string>\b(remove)\b</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#attribute-section</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#block</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-semicolon</string>
          </dict>
        </array>
      </dict>
      <key>method-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?x)
(?&lt;return-type&gt;
  (?&lt;type-name&gt;
    (?:
        (?:(?&lt;identifier&gt;[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
        (?&lt;name-and-type-args&gt; # identifier + type arguments (if any)
          \g&lt;identifier&gt;\s*
          (?&lt;type-args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type-args&gt;)+&gt;\s*)?
        )
        (?:\s*\.\s*\g&lt;name-and-type-args&gt;)* # Are there any more names being dotted into?
        (?:\s*\*\s*)* # pointer suffix?
        (?:\s*\?\s*)? # nullable suffix?
        (?:\s*\[(?:\s*,\s*)*\]\s*)* # array suffix?
    )|
    (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
  )\s+
)
(?&lt;interface-name&gt;\g&lt;type-name&gt;\s*\.\s*)?
(\g&lt;identifier&gt;)\s*
(&lt;([^&lt;&gt;]+)&gt;)?\s*
(?=\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>7</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#punctuation-accessor</string>
              </dict>
            </array>
          </dict>
          <key>8</key>
          <dict>
            <key>name</key>
            <string>entity.name.function.cs</string>
          </dict>
          <key>9</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type-parameter-list</string>
              </dict>
            </array>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#parenthesized-parameter-list</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#generic-constraints</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#block</string>
          </dict>
        </array>
      </dict>
      <key>constructor-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?=[_[:alpha:]][_[:alnum:]]*\s*\()</string>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>match</key>
            <string>\b([_[:alpha:]][_[:alnum:]]*)\b</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>entity.name.function.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>begin</key>
            <string>(:)</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>punctuation.separator.colon.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=\{|=&gt;)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#constructor-initializer</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#parenthesized-parameter-list</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#block</string>
          </dict>
        </array>
      </dict>
      <key>constructor-initializer</key>
      <dict>
        <key>begin</key>
        <string>\b(?:(base)|(this))\b\s*(?=\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.other.base.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.other.this.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#argument-list</string>
          </dict>
        </array>
      </dict>
      <key>destructor-declaration</key>
      <dict>
        <key>begin</key>
        <string>(~)([_[:alpha:]][_[:alnum:]]*)\s*(?=\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.tilde.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>entity.name.function.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#parenthesized-parameter-list</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#block</string>
          </dict>
        </array>
      </dict>
      <key>operator-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?x)
(?&lt;type-name&gt;
  (?:
      (?:(?&lt;identifier&gt;[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name-and-type-args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type-args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type-args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name-and-type-args&gt;)* # Are there any more names being dotted into?
      (?:\s*\*\s*)* # pointer suffix?
      (?:\s*\?\s*)? # nullable suffix?
      (?:\s*\[(?:\s*,\s*)*\]\s*)* # array suffix?
  )|
  (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
)\s*
(?&lt;operator-keyword&gt;(?:\b(?:operator)))\s*
(?&lt;operator&gt;(?:\+|-|\*|/|%|&amp;|\||\^|\&lt;\&lt;|\&gt;\&gt;|==|!=|\&gt;|\&lt;|\&gt;=|\&lt;=|!|~|\+\+|--|true|false))\s*
(?=\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>6</key>
          <dict>
            <key>name</key>
            <string>keyword.other.operator-decl.cs</string>
          </dict>
          <key>7</key>
          <dict>
            <key>name</key>
            <string>entity.name.function.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#parenthesized-parameter-list</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#block</string>
          </dict>
        </array>
      </dict>
      <key>conversion-operator-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?x)
(?&lt;explicit-or-implicit-keyword&gt;(?:\b(?:explicit|implicit)))\s*
(?&lt;operator-keyword&gt;(?:\b(?:operator)))\s*
(?&lt;type-name&gt;
  (?:
      (?:(?&lt;identifier&gt;[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name-and-type-args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type-args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type-args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name-and-type-args&gt;)* # Are there any more names being dotted into?
      (?:\s*\*\s*)* # pointer suffix?
      (?:\s*\?\s*)? # nullable suffix?
      (?:\s*\[(?:\s*,\s*)*\]\s*)* # array suffix?
  )|
  (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
)\s*
(?=\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>match</key>
                <string>\b(explicit)\b</string>
                <key>captures</key>
                <dict>
                  <key>1</key>
                  <dict>
                    <key>name</key>
                    <string>keyword.other.explicit.cs</string>
                  </dict>
                </dict>
              </dict>
              <dict>
                <key>match</key>
                <string>\b(implicit)\b</string>
                <key>captures</key>
                <dict>
                  <key>1</key>
                  <dict>
                    <key>name</key>
                    <string>keyword.other.implicit.cs</string>
                  </dict>
                </dict>
              </dict>
            </array>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.other.operator-decl.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#parenthesized-parameter-list</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#block</string>
          </dict>
        </array>
      </dict>
      <key>block</key>
      <dict>
        <key>begin</key>
        <string>\{</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.curlybrace.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\}</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.curlybrace.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#statement</string>
          </dict>
        </array>
      </dict>
      <key>variable-initializer</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!=|!)(=)(?!=|&gt;)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.assignment.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=[,\);}])</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>expression-body</key>
      <dict>
        <key>begin</key>
        <string>=&gt;</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.arrow.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=[,\);}])</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>goto-statement</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(goto)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.goto.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>\b(case)\b</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>keyword.control.case.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=;)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#expression</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>match</key>
            <string>\b(default)\b</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>keyword.control.default.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>name</key>
            <string>entity.name.label.cs</string>
            <key>match</key>
            <string>[_[:alpha:]][_[:alnum:]]*</string>
          </dict>
        </array>
      </dict>
      <key>return-statement</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(return)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.flow.return.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>break-or-continue-statement</key>
      <dict>
        <key>match</key>
        <string>(?&lt;!\.)\b(?:(break)|(continue))\b</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.flow.break.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.control.flow.continue.cs</string>
          </dict>
        </dict>
      </dict>
      <key>throw-statement</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(throw)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.flow.throw.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>yield-statement</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#yield-return-statement</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#yield-break-statement</string>
          </dict>
        </array>
      </dict>
      <key>yield-return-statement</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(yield)\b\s*\b(return)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.flow.yield.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.control.flow.return.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>yield-break-statement</key>
      <dict>
        <key>match</key>
        <string>(?&lt;!\.)\b(yield)\b\s*\b(break)\b</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.flow.yield.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.control.flow.break.cs</string>
          </dict>
        </dict>
      </dict>
      <key>if-statement</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(if)\b\s*(?=\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.conditional.if.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>\(</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\)</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#expression</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#statement</string>
          </dict>
        </array>
      </dict>
      <key>else-part</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(else)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.conditional.else.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#statement</string>
          </dict>
        </array>
      </dict>
      <key>switch-statement</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(switch)\b\s*(?=\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.switch.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>\(</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\)</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#expression</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>\{</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\}</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.curlybrace.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#switch-label</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#statement</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>switch-label</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>(?&lt;!\.)\b(case)\b\s+</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>keyword.control.case.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>:</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.separator.colon.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#expression</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>match</key>
            <string>(?&lt;!\.)\b(default)\b\s*(:)</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>keyword.control.default.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>punctuation.separator.colon.cs</string>
              </dict>
            </dict>
          </dict>
        </array>
      </dict>
      <key>do-statement</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(do)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.loop.do.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;|})</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#statement</string>
          </dict>
        </array>
      </dict>
      <key>while-statement</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(while)\b\s*(?=\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.loop.while.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>\(</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\)</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#expression</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#statement</string>
          </dict>
        </array>
      </dict>
      <key>for-statement</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(for)\b\s*(?=\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.loop.for.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>\(</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\)</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#local-variable-declaration</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#expression</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#punctuation-comma</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#punctuation-semicolon</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#statement</string>
          </dict>
        </array>
      </dict>
      <key>foreach-statement</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(foreach)\b\s*(?=\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.loop.foreach.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>\(</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\)</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>match</key>
                <string>(?x)
(?:
  (\bvar\b)|
  (?&lt;type-name&gt;
    (?:
        (?:(?&lt;identifier&gt;[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
        (?&lt;name-and-type-args&gt; # identifier + type arguments (if any)
          \g&lt;identifier&gt;\s*
          (?&lt;type-args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type-args&gt;)+&gt;\s*)?
        )
        (?:\s*\.\s*\g&lt;name-and-type-args&gt;)* # Are there any more names being dotted into?
        (?:\s*\*\s*)* # pointer suffix?
        (?:\s*\?\s*)? # nullable suffix?
        (?:\s*\[(?:\s*,\s*)*\]\s*)* # array suffix?
    )|
    (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
  )
)\s+
(\g&lt;identifier&gt;)\s+
\b(in)\b</string>
                <key>captures</key>
                <dict>
                  <key>1</key>
                  <dict>
                    <key>name</key>
                    <string>keyword.other.var.cs</string>
                  </dict>
                  <key>2</key>
                  <dict>
                    <key>patterns</key>
                    <array>
                      <dict>
                        <key>include</key>
                        <string>#type</string>
                      </dict>
                    </array>
                  </dict>
                  <key>7</key>
                  <dict>
                    <key>name</key>
                    <string>entity.name.variable.local.cs</string>
                  </dict>
                  <key>8</key>
                  <dict>
                    <key>name</key>
                    <string>keyword.control.loop.in.cs</string>
                  </dict>
                </dict>
              </dict>
              <dict>
                <key>include</key>
                <string>#expression</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#statement</string>
          </dict>
        </array>
      </dict>
      <key>try-statement</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#try-block</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#catch-clause</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#finally-clause</string>
          </dict>
        </array>
      </dict>
      <key>try-block</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(try)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.try.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#block</string>
          </dict>
        </array>
      </dict>
      <key>finally-clause</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(finally)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.try.finally.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#block</string>
          </dict>
        </array>
      </dict>
      <key>catch-clause</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(catch)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.try.catch.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>\(</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\)</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>match</key>
                <string>(?x)
(?&lt;type-name&gt;
  (?:
      (?:(?&lt;identifier&gt;[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name-and-type-args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type-args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type-args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name-and-type-args&gt;)* # Are there any more names being dotted into?
      (?:\s*\*\s*)* # pointer suffix?
      (?:\s*\?\s*)? # nullable suffix?
      (?:\s*\[(?:\s*,\s*)*\]\s*)* # array suffix?
  )|
  (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
)\s*
(?:\b(\g&lt;identifier&gt;)\b)?</string>
                <key>captures</key>
                <dict>
                  <key>1</key>
                  <dict>
                    <key>patterns</key>
                    <array>
                      <dict>
                        <key>include</key>
                        <string>#type</string>
                      </dict>
                    </array>
                  </dict>
                  <key>6</key>
                  <dict>
                    <key>name</key>
                    <string>entity.name.variable.local.cs</string>
                  </dict>
                </dict>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#when-clause</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#block</string>
          </dict>
        </array>
      </dict>
      <key>when-clause</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(when)\b\s*(\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.try.when.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\)</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>checked-unchecked-statement</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(?:(checked)|(unchecked))\b\s*(?!\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.other.checked.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.other.unchecked.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#block</string>
          </dict>
        </array>
      </dict>
      <key>lock-statement</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(lock)\b\s*(?=\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.other.lock.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\})|(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>\(</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\)</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#expression</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#statement</string>
          </dict>
        </array>
      </dict>
      <key>using-statement</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(using)\b\s*(?=\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.other.using.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=\;|})</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>\(</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\)</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#local-variable-declaration</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#expression</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>include</key>
            <string>#statement</string>
          </dict>
        </array>
      </dict>
      <key>labeled-statement</key>
      <dict>
        <key>match</key>
        <string>([_[:alpha:]][_[:alnum:]]*)\s*(:)</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>entity.name.label.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>punctuation.separator.colon.cs</string>
          </dict>
        </dict>
      </dict>
      <key>local-declaration</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#local-constant-declaration</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#local-variable-declaration</string>
          </dict>
        </array>
      </dict>
      <key>local-variable-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?x)
(?:
  (\bvar\b)|
  (?&lt;type-name&gt;
    (?:
        (?:(?&lt;identifier&gt;[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
        (?&lt;name-and-type-args&gt; # identifier + type arguments (if any)
          \g&lt;identifier&gt;\s*
          (?&lt;type-args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type-args&gt;)+&gt;\s*)?
        )
        (?:\s*\.\s*\g&lt;name-and-type-args&gt;)* # Are there any more names being dotted into?
        (?:\s*\*\s*)* # pointer suffix?
        (?:\s*\?\s*)? # nullable suffix?
        (?:\s*\[(?:\s*,\s*)*\]\s*)* # array suffix?
    )|
    (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
  )
)\s+
(\g&lt;identifier&gt;)\s*
(?=,|;|=|\))</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.other.var.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>7</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.local.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;|\))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>entity.name.variable.local.cs</string>
            <key>match</key>
            <string>[_[:alpha:]][_[:alnum:]]*</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#variable-initializer</string>
          </dict>
        </array>
      </dict>
      <key>local-constant-declaration</key>
      <dict>
        <key>begin</key>
        <string>(?x)
(?&lt;const-keyword&gt;\b(?:const)\b)\s*
(?&lt;type-name&gt;
  (?:
      (?:(?&lt;identifier&gt;[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name-and-type-args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type-args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type-args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name-and-type-args&gt;)* # Are there any more names being dotted into?
      (?:\s*\*\s*)* # pointer suffix?
      (?:\s*\?\s*)? # nullable suffix?
      (?:\s*\[(?:\s*,\s*)*\]\s*)* # array suffix?
  )|
  (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
)\s+
(\g&lt;identifier&gt;)\s*
(?=,|;|=)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>storage.modifier.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>7</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.local.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>entity.name.variable.local.cs</string>
            <key>match</key>
            <string>[_[:alpha:]][_[:alnum:]]*</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#variable-initializer</string>
          </dict>
        </array>
      </dict>
      <key>checked-unchecked-expression</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(?:(checked)|(unchecked))\b\s*(\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.other.checked.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.other.unchecked.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\)</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>typeof-or-default-expression</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(?:(typeof)|(default))\b\s*(\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.other.typeof.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.other.default.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\)</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#type</string>
          </dict>
        </array>
      </dict>
      <key>nameof-expression</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\.)\b(nameof)\b\s*(\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.other.nameof.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\)</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>interpolated-string</key>
      <dict>
        <key>name</key>
        <string>string.quoted.double.cs</string>
        <key>begin</key>
        <string>\$"</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(")|((?:[^\\\n])$)</string>
        <key>endCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.end.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>invalid.illegal.newline.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#string-character-escape</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#interpolation</string>
          </dict>
        </array>
      </dict>
      <key>verbatim-interpolated-string</key>
      <dict>
        <key>name</key>
        <string>string.quoted.double.cs</string>
        <key>begin</key>
        <string>\$@"</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>"(?=[^"])</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.end.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#verbatim-string-character-escape</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#interpolation</string>
          </dict>
        </array>
      </dict>
      <key>interpolation</key>
      <dict>
        <key>name</key>
        <string>meta.interpolation.cs</string>
        <key>begin</key>
        <string>(?&lt;=[^\{])((?:\{\{)*)(\{)(?=[^\{])</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>string.quoted.double.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.interpolation.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\}</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.interpolation.end.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>literal</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#boolean-literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#null-literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#numeric-literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#char-literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#string-literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#verbatim-string-literal</string>
          </dict>
        </array>
      </dict>
      <key>boolean-literal</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>constant.language.boolean.true.cs</string>
            <key>match</key>
            <string>(?&lt;!\.)\btrue\b</string>
          </dict>
          <dict>
            <key>name</key>
            <string>constant.language.boolean.false.cs</string>
            <key>match</key>
            <string>(?&lt;!\.)\bfalse\b</string>
          </dict>
        </array>
      </dict>
      <key>null-literal</key>
      <dict>
        <key>name</key>
        <string>constant.language.null.cs</string>
        <key>match</key>
        <string>(?&lt;!\.)\bnull\b</string>
      </dict>
      <key>numeric-literal</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>constant.numeric.hex.cs</string>
            <key>match</key>
            <string>\b0(x|X)[0-9a-fA-F_]+(U|u|L|l|UL|Ul|uL|ul|LU|Lu|lU|lu)?\b</string>
          </dict>
          <dict>
            <key>name</key>
            <string>constant.numeric.binary.cs</string>
            <key>match</key>
            <string>\b0(b|B)[01_]+(U|u|L|l|UL|Ul|uL|ul|LU|Lu|lU|lu)?\b</string>
          </dict>
          <dict>
            <key>name</key>
            <string>constant.numeric.decimal.cs</string>
            <key>match</key>
            <string>\b([0-9_]+)?\.[0-9_]+((e|E)[0-9]+)?(F|f|D|d|M|m)?\b</string>
          </dict>
          <dict>
            <key>name</key>
            <string>constant.numeric.decimal.cs</string>
            <key>match</key>
            <string>\b[0-9_]+(e|E)[0-9_]+(F|f|D|d|M|m)?\b</string>
          </dict>
          <dict>
            <key>name</key>
            <string>constant.numeric.decimal.cs</string>
            <key>match</key>
            <string>\b[0-9_]+(F|f|D|d|M|m)\b</string>
          </dict>
          <dict>
            <key>name</key>
            <string>constant.numeric.decimal.cs</string>
            <key>match</key>
            <string>\b[0-9_]+(U|u|L|l|UL|Ul|uL|ul|LU|Lu|lU|lu)?\b</string>
          </dict>
        </array>
      </dict>
      <key>char-literal</key>
      <dict>
        <key>name</key>
        <string>string.quoted.single.cs</string>
        <key>begin</key>
        <string>'</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.char.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(\')|((?:[^\\\n])$)</string>
        <key>endCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.char.end.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>invalid.illegal.newline.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#string-character-escape</string>
          </dict>
        </array>
      </dict>
      <key>string-literal</key>
      <dict>
        <key>name</key>
        <string>string.quoted.double.cs</string>
        <key>begin</key>
        <string>(?&lt;!@)"</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(")|((?:[^\\\n])$)</string>
        <key>endCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.end.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>invalid.illegal.newline.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#string-character-escape</string>
          </dict>
        </array>
      </dict>
      <key>string-character-escape</key>
      <dict>
        <key>name</key>
        <string>constant.character.escape.cs</string>
        <key>match</key>
        <string>\\.</string>
      </dict>
      <key>verbatim-string-literal</key>
      <dict>
        <key>name</key>
        <string>string.quoted.double.cs</string>
        <key>begin</key>
        <string>@"</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>"(?=[^"])</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.end.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#verbatim-string-character-escape</string>
          </dict>
        </array>
      </dict>
      <key>verbatim-string-character-escape</key>
      <dict>
        <key>name</key>
        <string>constant.character.escape.cs</string>
        <key>match</key>
        <string>""</string>
      </dict>
      <key>expression-operators</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>keyword.operator.assignment.compound.cs</string>
            <key>match</key>
            <string>\*=|/=|%=|\+=|-=</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.operator.assignment.compound.bitwise.cs</string>
            <key>match</key>
            <string>\&amp;=|\^=|&lt;&lt;=|&gt;&gt;=|\|=</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.operator.bitwise.shift.cs</string>
            <key>match</key>
            <string>&lt;&lt;|&gt;&gt;</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.operator.comparison.cs</string>
            <key>match</key>
            <string>==|!=</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.operator.relational.cs</string>
            <key>match</key>
            <string>&lt;=|&gt;=|&lt;|&gt;</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.operator.logical.cs</string>
            <key>match</key>
            <string>\!|&amp;&amp;|\|\|</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.operator.bitwise.cs</string>
            <key>match</key>
            <string>\&amp;|~|\^|\|</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.operator.assignment.cs</string>
            <key>match</key>
            <string>\=</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.operator.decrement.cs</string>
            <key>match</key>
            <string>--</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.operator.increment.cs</string>
            <key>match</key>
            <string>\+\+</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.operator.arithmetic.cs</string>
            <key>match</key>
            <string>%|\*|/|-|\+</string>
          </dict>
          <dict>
            <key>name</key>
            <string>keyword.operator.null-coalescing.cs</string>
            <key>match</key>
            <string>\?\?</string>
          </dict>
        </array>
      </dict>
      <key>conditional-operator</key>
      <dict>
        <key>begin</key>
        <string>(?&lt;!\?)\?(?!\?|\.|\[)</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.conditional.question-mark.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>:</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.conditional.colon.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>await-expression</key>
      <dict>
        <key>name</key>
        <string>keyword.other.await.cs</string>
        <key>match</key>
        <string>(?!\.)\b(await)\b</string>
      </dict>
      <key>parenthesized-expression</key>
      <dict>
        <key>begin</key>
        <string>\(</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\)</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>initializer-expression</key>
      <dict>
        <key>begin</key>
        <string>\{</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.curlybrace.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\}</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.curlybrace.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
        </array>
      </dict>
      <key>identifier</key>
      <dict>
        <key>name</key>
        <string>variable.other.readwrite.cs</string>
        <key>match</key>
        <string>[_[:alpha:]][_[:alnum:]]*</string>
      </dict>
      <key>cast-expression</key>
      <dict>
        <key>match</key>
        <string>(?x)
(\()\s*
(?&lt;type-name&gt;
  (?:
      (?:(?&lt;identifier&gt;[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name-and-type-args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type-args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type-args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name-and-type-args&gt;)* # Are there any more names being dotted into?
      (?:\s*\*\s*)* # pointer suffix?
      (?:\s*\?\s*)? # nullable suffix?
      (?:\s*\[(?:\s*,\s*)*\]\s*)* # array suffix?
  )|
  (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
)\s*
(\))(?=\s*[_[:alnum:]\(])</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.open.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>7</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.close.cs</string>
          </dict>
        </dict>
      </dict>
      <key>as-expression</key>
      <dict>
        <key>match</key>
        <string>(?x)
(?&lt;!\.)\b(as)\b\s*
(?&lt;type-name&gt;
  (?:
      (?:(?&lt;identifier&gt;[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name-and-type-args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type-args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type-args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name-and-type-args&gt;)* # Are there any more names being dotted into?
      (?:\s*\*\s*)* # pointer suffix?
      (?:\s*\?\s*)? # nullable suffix?
      (?:\s*\[(?:\s*,\s*)*\]\s*)* # array suffix?
  )|
  (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
)?</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.other.as.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
        </dict>
      </dict>
      <key>is-expression</key>
      <dict>
        <key>match</key>
        <string>(?x)
(?&lt;!\.)\b(is)\b\s*
(?&lt;type-name&gt;
  (?:
      (?:(?&lt;identifier&gt;[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name-and-type-args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type-args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type-args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name-and-type-args&gt;)* # Are there any more names being dotted into?
      (?:\s*\*\s*)* # pointer suffix?
      (?:\s*\?\s*)? # nullable suffix?
      (?:\s*\[(?:\s*,\s*)*\]\s*)* # array suffix?
  )|
  (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
)?</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.other.is.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
        </dict>
      </dict>
      <key>this-or-base-expression</key>
      <dict>
        <key>match</key>
        <string>\b(?:(base)|(this))\b</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.other.base.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.other.this.cs</string>
          </dict>
        </dict>
      </dict>
      <key>invocation-expression</key>
      <dict>
        <key>begin</key>
        <string>(?x)
(?:(\?)\s*)?                                     # preceding null-conditional operator?
(?:(\.)\s*)?                                     # preceding dot?
([_[:alpha:]][_[:alnum:]]*)\s*                   # method name
(?&lt;type-args&gt;\s*&lt;([^&lt;&gt;]|\g&lt;type-args&gt;)+&gt;\s*)?\s* # type arguments
(?=\()                                           # open paren of argument list</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.null-conditional.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>punctuation.accessor.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>entity.name.function.cs</string>
          </dict>
          <key>4</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type-arguments</string>
              </dict>
            </array>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#argument-list</string>
          </dict>
        </array>
      </dict>
      <key>element-access-expression</key>
      <dict>
        <key>begin</key>
        <string>(?x)
(?:(\?)\s*)?                   # preceding null-conditional operator?
(?:(\.)\s*)?                   # preceding dot?
([_[:alpha:]][_[:alnum:]]*)\s* # property name
(?:(\?)\s*)?                   # null-conditional operator?
(?=\[)                         # open bracket of argument list</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.null-conditional.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>punctuation.accessor.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>variable.other.object.property.cs</string>
          </dict>
          <key>4</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.null-conditional.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\])</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#bracketed-argument-list</string>
          </dict>
        </array>
      </dict>
      <key>member-access-expression</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>match</key>
            <string>(?x)
(?:(\?)\s*)?                   # preceding null-conditional operator?
(\.)\s*                        # preceding dot
([_[:alpha:]][_[:alnum:]]*)\s* # property name
(?![_[:alnum:]]|\(|(\?)?\[|&lt;)  # next character is not alpha-numeric, nor a (, [, or &lt;. Also, test for ?[</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>keyword.operator.null-conditional.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>punctuation.accessor.cs</string>
              </dict>
              <key>3</key>
              <dict>
                <key>name</key>
                <string>variable.other.object.property.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>match</key>
            <string>(?x)
(\.)?\s*
([_[:alpha:]][_[:alnum:]]*)
(?&lt;type-params&gt;\s*&lt;([^&lt;&gt;]|\g&lt;type-params&gt;)+&gt;\s*)
(?=
  (\s*\?)?
  \s*\.\s*[_[:alpha:]][_[:alnum:]]*
)</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>punctuation.accessor.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>variable.other.object.cs</string>
              </dict>
              <key>3</key>
              <dict>
                <key>patterns</key>
                <array>
                  <dict>
                    <key>include</key>
                    <string>#type-arguments</string>
                  </dict>
                </array>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>match</key>
            <string>(?x)
([_[:alpha:]][_[:alnum:]]*)
(?=
  (\s*\?)?
  \s*\.\s*[_[:alpha:]][_[:alnum:]]*
)</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>variable.other.object.cs</string>
              </dict>
            </dict>
          </dict>
        </array>
      </dict>
      <key>object-creation-expression</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#object-creation-expression-with-parameters</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#object-creation-expression-with-no-parameters</string>
          </dict>
        </array>
      </dict>
      <key>object-creation-expression-with-parameters</key>
      <dict>
        <key>begin</key>
        <string>(?x)
(new)\s+
(?&lt;type-name&gt;
  (?:
      (?:(?&lt;identifier&gt;[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name-and-type-args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type-args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type-args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name-and-type-args&gt;)* # Are there any more names being dotted into?
      (?:\s*\*\s*)* # pointer suffix?
      (?:\s*\?\s*)? # nullable suffix?
      (?:\s*\[(?:\s*,\s*)*\]\s*)* # array suffix?
  )|
  (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
)\s*
(?=\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.other.new.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#argument-list</string>
          </dict>
        </array>
      </dict>
      <key>object-creation-expression-with-no-parameters</key>
      <dict>
        <key>match</key>
        <string>(?x)
(new)\s+
(?&lt;type-name&gt;
  (?:
      (?:(?&lt;identifier&gt;[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name-and-type-args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type-args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type-args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name-and-type-args&gt;)* # Are there any more names being dotted into?
      (?:\s*\*\s*)* # pointer suffix?
      (?:\s*\?\s*)? # nullable suffix?
      (?:\s*\[(?:\s*,\s*)*\]\s*)* # array suffix?
  )|
  (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
)\s*
(?=\{|$)</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.other.new.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
        </dict>
      </dict>
      <key>array-creation-expression</key>
      <dict>
        <key>begin</key>
        <string>(?x)
\b(new)\b\s*
(?&lt;type-name&gt;
  (?:
      (?:(?&lt;identifier&gt;[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name-and-type-args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type-args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type-args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name-and-type-args&gt;)* # Are there any more names being dotted into?
      (?:\s*\*\s*)* # pointer suffix?
      (?:\s*\?\s*)? # nullable suffix?
      (?:\s*\[(?:\s*,\s*)*\]\s*)* # array suffix?
  )|
  (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
)?\s*
(?=\[)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.other.new.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=\])</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#bracketed-argument-list</string>
          </dict>
        </array>
      </dict>
      <key>anonymous-object-creation-expression</key>
      <dict>
        <key>begin</key>
        <string>\b(new)\b\s*(?=\{|$)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.other.new.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;|\))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#initializer-expression</string>
          </dict>
        </array>
      </dict>
      <key>bracketed-parameter-list</key>
      <dict>
        <key>begin</key>
        <string>(?=(\[))</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.squarebracket.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=(\]))</string>
        <key>endCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.squarebracket.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>(?&lt;=\[)</string>
            <key>end</key>
            <string>(?=\])</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#comment</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#attribute-section</string>
              </dict>
              <dict>
                <key>name</key>
                <string>storage.modifier.cs</string>
                <key>match</key>
                <string>\b(ref|params|out)\b</string>
              </dict>
              <dict>
                <key>match</key>
                <string>\s+([_[:alpha:]][_[:alnum:]]*)\s*(?=[,\]])</string>
                <key>captures</key>
                <dict>
                  <key>1</key>
                  <dict>
                    <key>name</key>
                    <string>entity.name.variable.parameter.cs</string>
                  </dict>
                </dict>
              </dict>
              <dict>
                <key>include</key>
                <string>#variable-initializer</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#punctuation-comma</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>parenthesized-parameter-list</key>
      <dict>
        <key>begin</key>
        <string>(\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(\))</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#attribute-section</string>
          </dict>
          <dict>
            <key>name</key>
            <string>storage.modifier.cs</string>
            <key>match</key>
            <string>\b(ref|params|out|this)\b</string>
          </dict>
          <dict>
            <key>match</key>
            <string>\s+([_[:alpha:]][_[:alnum:]]*)\s*(?=[,)])</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>entity.name.variable.parameter.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>include</key>
            <string>#variable-initializer</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#type</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
        </array>
      </dict>
      <key>argument-list</key>
      <dict>
        <key>begin</key>
        <string>\(</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\)</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#named-argument</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#argument</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
        </array>
      </dict>
      <key>bracketed-argument-list</key>
      <dict>
        <key>begin</key>
        <string>\[</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.squarebracket.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\]</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.squarebracket.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#named-argument</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#argument</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
        </array>
      </dict>
      <key>named-argument</key>
      <dict>
        <key>begin</key>
        <string>([_[:alpha:]][_[:alnum:]]*)\s*(:)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.parameter.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>punctuation.separator.colon.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=(,|\)|\]))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>argument</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>storage.modifier.cs</string>
            <key>match</key>
            <string>\b(ref|out)\b</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>query-expression</key>
      <dict>
        <key>begin</key>
        <string>(?x)
\b(from)\b\s*
(?&lt;type-name&gt;
  (?:
      (?:(?&lt;identifier&gt;[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name-and-type-args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type-args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type-args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name-and-type-args&gt;)* # Are there any more names being dotted into?
      (?:\s*\*\s*)* # pointer suffix?
      (?:\s*\?\s*)? # nullable suffix?
      (?:\s*\[(?:\s*,\s*)*\]\s*)* # array suffix?
  )|
  (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
)?
\b(\g&lt;identifier&gt;)\b\s*
\b(in)\b\s*</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.query.from.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>7</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.range-variable.cs</string>
          </dict>
          <key>8</key>
          <dict>
            <key>name</key>
            <string>keyword.query.in.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;|\))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#query-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>query-body</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#let-clause</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#where-clause</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#join-clause</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#orderby-clause</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#select-clause</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#group-clause</string>
          </dict>
        </array>
      </dict>
      <key>let-clause</key>
      <dict>
        <key>begin</key>
        <string>(?x)
\b(let)\b\s*
\b([_[:alpha:]][_[:alnum:]]*)\b\s*
(=)\s*</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.query.let.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.range-variable.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>keyword.operator.assignment.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;|\))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#query-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>where-clause</key>
      <dict>
        <key>begin</key>
        <string>(?x)
\b(where)\b\s*</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.query.where.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;|\))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#query-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>join-clause</key>
      <dict>
        <key>begin</key>
        <string>(?x)
\b(join)\b\s*
(?&lt;type-name&gt;
  (?:
      (?:(?&lt;identifier&gt;[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name-and-type-args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type-args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type-args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name-and-type-args&gt;)* # Are there any more names being dotted into?
      (?:\s*\*\s*)* # pointer suffix?
      (?:\s*\?\s*)? # nullable suffix?
      (?:\s*\[(?:\s*,\s*)*\]\s*)* # array suffix?
  )|
  (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
)?
\b(\g&lt;identifier&gt;)\b\s*
\b(in)\b\s*</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.query.join.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>7</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.range-variable.cs</string>
          </dict>
          <key>8</key>
          <dict>
            <key>name</key>
            <string>keyword.query.in.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;|\))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#join-on</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#join-equals</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#join-into</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#query-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>join-on</key>
      <dict>
        <key>match</key>
        <string>\b(on)\b\s*</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.query.on.cs</string>
          </dict>
        </dict>
      </dict>
      <key>join-equals</key>
      <dict>
        <key>match</key>
        <string>\b(equals)\b\s*</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.query.equals.cs</string>
          </dict>
        </dict>
      </dict>
      <key>join-into</key>
      <dict>
        <key>match</key>
        <string>(?x)
\b(into)\b\s*
\b([_[:alpha:]][_[:alnum:]]*)\b\s*</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.query.into.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.range-variable.cs</string>
          </dict>
        </dict>
      </dict>
      <key>orderby-clause</key>
      <dict>
        <key>begin</key>
        <string>\b(orderby)\b\s*</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.query.orderby.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;|\))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#ordering-direction</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#query-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
        </array>
      </dict>
      <key>ordering-direction</key>
      <dict>
        <key>match</key>
        <string>\b(?:(ascending)|(descending))\b</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.query.ascending.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.query.descending.cs</string>
          </dict>
        </dict>
      </dict>
      <key>select-clause</key>
      <dict>
        <key>begin</key>
        <string>\b(select)\b\s*</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.query.select.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;|\))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#query-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>group-clause</key>
      <dict>
        <key>begin</key>
        <string>\b(group)\b\s*</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.query.group.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=;|\))</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#group-by</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#group-into</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#query-body</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#expression</string>
          </dict>
        </array>
      </dict>
      <key>group-by</key>
      <dict>
        <key>match</key>
        <string>\b(by)\b\s*</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.query.by.cs</string>
          </dict>
        </dict>
      </dict>
      <key>group-into</key>
      <dict>
        <key>match</key>
        <string>(?x)
\b(into)\b\s*
\b([_[:alpha:]][_[:alnum:]]*)\b\s*</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.query.into.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.range-variable.cs</string>
          </dict>
        </dict>
      </dict>
      <key>anonymous-method-expression</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>(?x)
(?:\b(async)\b\s*)?
\b([_[:alpha:]][_[:alnum:]]*)\b\s*
(=&gt;)</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>storage.modifier.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>entity.name.variable.parameter.cs</string>
              </dict>
              <key>3</key>
              <dict>
                <key>name</key>
                <string>keyword.operator.arrow.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=\)|;)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#block</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#expression</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>(?x)
(?:\b(async)\b\s*)?
(\(.*\))\s*
(=&gt;)</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>storage.modifier.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>patterns</key>
                <array>
                  <dict>
                    <key>include</key>
                    <string>#lambda-parameter-list</string>
                  </dict>
                </array>
              </dict>
              <key>3</key>
              <dict>
                <key>name</key>
                <string>keyword.operator.arrow.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=\)|;)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#block</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#expression</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>begin</key>
            <string>(?x)
(?:\b(async)\b\s*)?
(?:\b(delegate)\b\s*)</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>storage.modifier.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>keyword.other.delegate.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=\)|;)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#parenthesized-parameter-list</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#block</string>
              </dict>
              <dict>
                <key>include</key>
                <string>#expression</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>lambda-parameter-list</key>
      <dict>
        <key>begin</key>
        <string>(\()</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(\))</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#attribute-section</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#lambda-parameter</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
        </array>
      </dict>
      <key>lambda-parameter</key>
      <dict>
        <key>match</key>
        <string>(?x)
(ref|out)?\s*
(?&lt;type-name&gt;
  (?:
      (?:(?&lt;identifier&gt;[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name-and-type-args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type-args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type-args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name-and-type-args&gt;)* # Are there any more names being dotted into?
      (?:\s*\*\s*)* # pointer suffix?
      (?:\s*\?\s*)? # nullable suffix?
      (?:\s*\[(?:\s*,\s*)*\]\s*)* # array suffix?
  )|
  (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
)?
\b(\g&lt;identifier&gt;)\b\s*
(?=[,)])</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>storage.modifier.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>7</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.parameter.cs</string>
          </dict>
        </dict>
      </dict>
      <key>type</key>
      <dict>
        <key>name</key>
        <string>meta.type.cs</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#tuple-type</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#type-builtin</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#type-name</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#type-arguments</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#type-array-suffix</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#type-nullable-suffix</string>
          </dict>
        </array>
      </dict>
      <key>tuple-type</key>
      <dict>
        <key>begin</key>
        <string>\(</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\)</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.parenthesis.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#tuple-element</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
        </array>
      </dict>
      <key>tuple-element</key>
      <dict>
        <key>match</key>
        <string>(?x)
(?&lt;type-name&gt;
  (?:
      (?:(?&lt;identifier&gt;[_[:alpha:]][_[:alnum:]]*)\s*\:\:\s*)? # alias-qualification
      (?&lt;name-and-type-args&gt; # identifier + type arguments (if any)
        \g&lt;identifier&gt;\s*
        (?&lt;type-args&gt;\s*&lt;(?:[^&lt;&gt;]|\g&lt;type-args&gt;)+&gt;\s*)?
      )
      (?:\s*\.\s*\g&lt;name-and-type-args&gt;)* # Are there any more names being dotted into?
      (?:\s*\*\s*)* # pointer suffix?
      (?:\s*\?\s*)? # nullable suffix?
      (?:\s*\[(?:\s*,\s*)*\]\s*)* # array suffix?
  )|
  (?&lt;tuple&gt;\s*\((?:[^\(\)]|\g&lt;tuple&gt;)+\))
)
(?:\b(?&lt;tuple-name&gt;\g&lt;identifier&gt;)\b)?</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#type</string>
              </dict>
            </array>
          </dict>
          <key>6</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.tuple-element.cs</string>
          </dict>
        </dict>
      </dict>
      <key>type-builtin</key>
      <dict>
        <key>match</key>
        <string>\b(bool|byte|char|decimal|double|float|int|long|object|sbyte|short|string|uint|ulong|ushort|void)\b</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.type.cs</string>
          </dict>
        </dict>
      </dict>
      <key>type-name</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>match</key>
            <string>([_[:alpha:]][_[:alnum:]]*)\s*(\:\:)</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>entity.name.type.alias.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>punctuation.separator.coloncolon.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>match</key>
            <string>([_[:alpha:]][_[:alnum:]]*)\s*(\.)</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>storage.type.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>punctuation.accessor.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>match</key>
            <string>(\.)\s*([_[:alpha:]][_[:alnum:]]*)</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>punctuation.accessor.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>storage.type.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>name</key>
            <string>storage.type.cs</string>
            <key>match</key>
            <string>[_[:alpha:]][_[:alnum:]]*</string>
          </dict>
        </array>
      </dict>
      <key>type-arguments</key>
      <dict>
        <key>begin</key>
        <string>&lt;</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.typeparameters.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>&gt;</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.typeparameters.end.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#type</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
        </array>
      </dict>
      <key>type-array-suffix</key>
      <dict>
        <key>begin</key>
        <string>\[</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.squarebracket.open.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\]</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.squarebracket.close.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#punctuation-comma</string>
          </dict>
        </array>
      </dict>
      <key>type-nullable-suffix</key>
      <dict>
        <key>match</key>
        <string>\?</string>
        <key>captures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.separator.question-mark.cs</string>
          </dict>
        </dict>
      </dict>
      <key>operator-assignment</key>
      <dict>
        <key>name</key>
        <string>keyword.operator.assignment.cs</string>
        <key>match</key>
        <string>(?&lt;!=|!)(=)(?!=)</string>
      </dict>
      <key>punctuation-comma</key>
      <dict>
        <key>name</key>
        <string>punctuation.separator.comma.cs</string>
        <key>match</key>
        <string>,</string>
      </dict>
      <key>punctuation-semicolon</key>
      <dict>
        <key>name</key>
        <string>punctuation.terminator.statement.cs</string>
        <key>match</key>
        <string>;</string>
      </dict>
      <key>punctuation-accessor</key>
      <dict>
        <key>name</key>
        <string>punctuation.accessor.cs</string>
        <key>match</key>
        <string>\.</string>
      </dict>
      <key>preprocessor</key>
      <dict>
        <key>name</key>
        <string>meta.preprocessor.cs</string>
        <key>begin</key>
        <string>^\s*(\#)\s*</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.separator.hash.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?&lt;=$)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor-define-or-undef</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor-if-or-elif</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor-else-or-endif</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor-warning-or-error</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor-region</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor-endregion</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor-line</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor-pragma-warning</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor-pragma-checksum</string>
          </dict>
        </array>
      </dict>
      <key>preprocessor-define-or-undef</key>
      <dict>
        <key>match</key>
        <string>\b(?:(define)|(undef))\b\s*\b([_[:alpha:]][_[:alnum:]]*)\b</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.define.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.undef.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>entity.name.variable.preprocessor.symbol.cs</string>
          </dict>
        </dict>
      </dict>
      <key>preprocessor-if-or-elif</key>
      <dict>
        <key>begin</key>
        <string>\b(?:(if)|(elif))\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.if.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.elif.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=$)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#preprocessor-expression</string>
          </dict>
        </array>
      </dict>
      <key>preprocessor-else-or-endif</key>
      <dict>
        <key>match</key>
        <string>\b(?:(else)|(endif))\b</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.else.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.endif.cs</string>
          </dict>
        </dict>
      </dict>
      <key>preprocessor-warning-or-error</key>
      <dict>
        <key>match</key>
        <string>\b(?:(warning)|(error))\b\s*(.*)(?=$)</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.warning.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.error.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>string.unquoted.preprocessor.message.cs</string>
          </dict>
        </dict>
      </dict>
      <key>preprocessor-region</key>
      <dict>
        <key>match</key>
        <string>\b(region)\b\s*(.*)(?=$)</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.region.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>string.unquoted.preprocessor.message.cs</string>
          </dict>
        </dict>
      </dict>
      <key>preprocessor-endregion</key>
      <dict>
        <key>match</key>
        <string>\b(endregion)\b</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.endregion.cs</string>
          </dict>
        </dict>
      </dict>
      <key>preprocessor-line</key>
      <dict>
        <key>begin</key>
        <string>\b(line)\b</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.line.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(?=$)</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>match</key>
            <string>\b(?:(default|hidden))</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>keyword.preprocessor.default.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>keyword.preprocessor.hidden.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>match</key>
            <string>[0-9]+</string>
            <key>captures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>constant.numeric.decimal.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>match</key>
            <string>\"[^"]*\"</string>
            <key>captures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>string.quoted.double.cs</string>
              </dict>
            </dict>
          </dict>
        </array>
      </dict>
      <key>preprocessor-pragma-warning</key>
      <dict>
        <key>match</key>
        <string>\b(pragma)\b\s*\b(warning)\b\s*\b(?:(disable)|(restore))\b(\s*[0-9]+(?:\s*,\s*[0-9]+)?)?</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.pragma.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.warning.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.disable.cs</string>
          </dict>
          <key>4</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.restore.cs</string>
          </dict>
          <key>5</key>
          <dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>match</key>
                <string>[0-9]+</string>
                <key>captures</key>
                <dict>
                  <key>0</key>
                  <dict>
                    <key>name</key>
                    <string>constant.numeric.decimal.cs</string>
                  </dict>
                </dict>
              </dict>
              <dict>
                <key>include</key>
                <string>#punctuation-comma</string>
              </dict>
            </array>
          </dict>
        </dict>
      </dict>
      <key>preprocessor-pragma-checksum</key>
      <dict>
        <key>match</key>
        <string>\b(pragma)\b\s*\b(checksum)\b\s*(\"[^"]*\")\s*(\"[^"]*\")\s*(\"[^"]*\")</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.pragma.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>keyword.preprocessor.checksum.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>string.quoted.double.cs</string>
          </dict>
          <key>4</key>
          <dict>
            <key>name</key>
            <string>string.quoted.double.cs</string>
          </dict>
          <key>5</key>
          <dict>
            <key>name</key>
            <string>string.quoted.double.cs</string>
          </dict>
        </dict>
      </dict>
      <key>preprocessor-expression</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>begin</key>
            <string>\(</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.open.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\)</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.parenthesis.close.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#preprocessor-expression</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>match</key>
            <string>\b(?:(true)|(false)|([_[:alpha:]][_[:alnum:]]*))\b</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>constant.language.boolean.true.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>constant.language.boolean.false.cs</string>
              </dict>
              <key>3</key>
              <dict>
                <key>name</key>
                <string>entity.name.variable.preprocessor.symbol.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>match</key>
            <string>(==|!=)|(\!|&amp;&amp;|\|\|)</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>keyword.operator.comparison.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>keyword.operator.logical.cs</string>
              </dict>
            </dict>
          </dict>
        </array>
      </dict>
      <key>comment</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>comment.block.cs</string>
            <key>begin</key>
            <string>/\*</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.definition.comment.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\*/</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.definition.comment.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>begin</key>
            <string>(^\s+)?(?=//)</string>
            <key>beginCaptures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>punctuation.whitespace.comment.leading.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>(?=$)</string>
            <key>patterns</key>
            <array>
              <dict>
                <key>name</key>
                <string>comment.block.documentation.cs</string>
                <key>begin</key>
                <string>(?&lt;!/)///(?!/)</string>
                <key>beginCaptures</key>
                <dict>
                  <key>0</key>
                  <dict>
                    <key>name</key>
                    <string>punctuation.definition.comment.cs</string>
                  </dict>
                </dict>
                <key>end</key>
                <string>(?=$)</string>
                <key>patterns</key>
                <array>
                  <dict>
                    <key>include</key>
                    <string>#xml-doc-comment</string>
                  </dict>
                </array>
              </dict>
              <dict>
                <key>name</key>
                <string>comment.line.double-slash.cs</string>
                <key>begin</key>
                <string>(?&lt;!/)//(?!/)</string>
                <key>beginCaptures</key>
                <dict>
                  <key>0</key>
                  <dict>
                    <key>name</key>
                    <string>punctuation.definition.comment.cs</string>
                  </dict>
                </dict>
                <key>end</key>
                <string>(?=$)</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>xml-doc-comment</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#xml-comment</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#xml-character-entity</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#xml-cdata</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#xml-tag</string>
          </dict>
        </array>
      </dict>
      <key>xml-tag</key>
      <dict>
        <key>name</key>
        <string>meta.tag.cs</string>
        <key>begin</key>
        <string>(?x)
(&lt;/?)
(
  (?:
    ([-_[:alnum:]]+)
    (:)
  )?
  ([-_[:alnum:]]+)
)</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.tag.cs</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>entity.name.tag.cs</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>entity.name.tag.namespace.cs</string>
          </dict>
          <key>4</key>
          <dict>
            <key>name</key>
            <string>punctuation.separator.colon.cs</string>
          </dict>
          <key>5</key>
          <dict>
            <key>name</key>
            <string>entity.name.tag.localname.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>(/?&gt;)</string>
        <key>endCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.tag.cs</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#xml-attribute</string>
          </dict>
        </array>
      </dict>
      <key>xml-attribute</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>match</key>
            <string>(?x)
(?:^|\s+)
(
  (?:
    ([-_[:alnum:]]+)
    (:)
  )?
  ([-_[:alnum:]]+)
)
(=)</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>entity.other.attribute-name.cs</string>
              </dict>
              <key>2</key>
              <dict>
                <key>name</key>
                <string>entity.other.attribute-name.namespace.cs</string>
              </dict>
              <key>3</key>
              <dict>
                <key>name</key>
                <string>punctuation.separator.colon.cs</string>
              </dict>
              <key>4</key>
              <dict>
                <key>name</key>
                <string>entity.other.attribute-name.localname.cs</string>
              </dict>
              <key>5</key>
              <dict>
                <key>name</key>
                <string>punctuation.separator.equals.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>include</key>
            <string>#xml-string</string>
          </dict>
        </array>
      </dict>
      <key>xml-cdata</key>
      <dict>
        <key>name</key>
        <string>string.unquoted.cdata.cs</string>
        <key>begin</key>
        <string>&lt;!\[CDATA\[</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.begin.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>\]\]&gt;</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.string.end.cs</string>
          </dict>
        </dict>
      </dict>
      <key>xml-string</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>string.quoted.single.cs</string>
            <key>begin</key>
            <string>\'</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.definition.string.begin.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\'</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.definition.string.end.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#xml-character-entity</string>
              </dict>
            </array>
          </dict>
          <dict>
            <key>name</key>
            <string>string.quoted.double.cs</string>
            <key>begin</key>
            <string>\"</string>
            <key>beginCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.definition.string.begin.cs</string>
              </dict>
            </dict>
            <key>end</key>
            <string>\"</string>
            <key>endCaptures</key>
            <dict>
              <key>0</key>
              <dict>
                <key>name</key>
                <string>punctuation.definition.string.end.cs</string>
              </dict>
            </dict>
            <key>patterns</key>
            <array>
              <dict>
                <key>include</key>
                <string>#xml-character-entity</string>
              </dict>
            </array>
          </dict>
        </array>
      </dict>
      <key>xml-character-entity</key>
      <dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>name</key>
            <string>constant.character.entity.cs</string>
            <key>match</key>
            <string>(?x)
(&amp;)
(
  (?:[[:alpha:]:_][[:alnum:]:_.-]*)|
  (?:\#[[:digit:]]+)|
  (?:\#x[[:xdigit:]]+)
)
(;)</string>
            <key>captures</key>
            <dict>
              <key>1</key>
              <dict>
                <key>name</key>
                <string>punctuation.definition.constant.cs</string>
              </dict>
              <key>3</key>
              <dict>
                <key>name</key>
                <string>punctuation.definition.constant.cs</string>
              </dict>
            </dict>
          </dict>
          <dict>
            <key>name</key>
            <string>invalid.illegal.bad-ampersand.cs</string>
            <key>match</key>
            <string>&amp;</string>
          </dict>
        </array>
      </dict>
      <key>xml-comment</key>
      <dict>
        <key>name</key>
        <string>comment.block.cs</string>
        <key>begin</key>
        <string>&lt;!--</string>
        <key>beginCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.comment.cs</string>
          </dict>
        </dict>
        <key>end</key>
        <string>--&gt;</string>
        <key>endCaptures</key>
        <dict>
          <key>0</key>
          <dict>
            <key>name</key>
            <string>punctuation.definition.comment.cs</string>
          </dict>
        </dict>
      </dict>
    </dict>
  </dict>
</plist>